Skip to main content

Uso de Depictor para visualizar grupos de ejes

Para este proyecto, también necesita el CODESYS Depictor complemento con una licencia válida.

La aplicación SoftMotion consta de cuatro accionamientos giratorios configurados como un grupo de ejes. Los primeros tres ejes mueven el TCP en el plano X / Y y el cuarto eje en el plano Z.

El ejemplo demuestra cómo se puede utilizar Depictor con la configuración cinemática Kin_Scara3_Z. También puede personalizar el mismo procedimiento para otras configuraciones cinemáticas.

_sm_img_dep.png

Creando el proyecto estándar

  1. Cree un proyecto estándar con el CODESYS SoftMotion Win controlador y el lenguaje de programación ST.

  2. Agregue un administrador de biblioteca en el POU vista.

  3. Abra el Administrador de bibliotecas y agregue las bibliotecas SM3_Depictor y DepictorBase.

Añadiendo y parametrizando los ejes

  1. Inserte cuatro ejes virtuales debajo del objeto Piscina SoftMotion General Axis y nombre los ejes como Drive1 ... Drive4.

  2. Parametrizar los ejes Drive1, Drive2, Drive3 y Drive4 como tipo de eje finito con interruptores finales de software de -180 grados a 180 grados.

    Editor de configuración:

    _sm_img_depictor_drives.png

Para más información, ver: unidad virtual

Configurar los grupos de ejes

  1. Agregue un grupo de ejes "KinScara" debajo de la aplicación. Para hacer esto, haga clic en Proyecto → Agregar objeto → Grupo de ejes.

  2. En el configurador, haga clic en Seleccionar cinemática. Selecciona el TRAFO.Kin_Scara3_Z cinemática.

  3. Defina los parámetros de la siguiente manera:

    • dArmLength1, dArmLength2, dArmLength3: 500

    • dOffsetA1, dOffsetA2, dOffsetA3, dOffsetZ: 0

  4. Ordene los ejes de la siguiente manera:

    • A1: Drive1

    • A2: Drive2

    • A3: Drive3

    • Z: Drive4

    Nota: Puede arrastrar los ejes directamente al campo de entrada.

Para más información, ver: Cinemática

Creando el programa del controlador

  1. En el PLC_PRG programa, declare instancias del MC_Power bloque de funciones para todas las unidades. Crear un istate variable para el diagrama de estado.

    VAR
     Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power;
     istate: INT;
    END_VAR
  2. Defina un diagrama de estado en la implementación.

    CASE istate OF
     0:
     1:
     2:
    END_CASE
  3. Activar todas las unidades en estado 0.

    0:
     Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN
      istate:=istate+1;
     END_IF
  4. Cuando los ejes están activados, habilite el grupo de ejes (cambie de "desactivado" a "standby").

    VAR
     GroupEnable:MC_GroupEnable;
    END_VAR
    
    1:
     GroupEnable(AxisGroup:=KinScara, Execute:=TRUE);
     IF GroupEnable.Done THEN
      istate:=istate+1;
     END_IF
  5. Declare e inicialice una variable para guardar el valor establecido en coordenadas de máquina. Declare dos instancias de tipo SMC_POS_REF para representar el TCP en coordenadas cartesianas y de eje.

    VAR
     Frame: MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
     Pos_Cart: SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
     Pos_Axis: SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates
    END_VAR
    VAR CONSTANT
     axispos: TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
    END_VAR
    
    2:
     Pos_Cart.c:= Frame; // To represent the TCP in cartesian coordinates;
  6. Declare una instancia de MC_MoveDirectAbsolute para mover el robot SCARA a las coordenadas especificadas.

    VAR
     MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates
    END_VAR
    
    2:
     MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined Axis coordinates
     //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates
    
     IF MoveAbs.Done THEN
             MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates
       istate:=2;
            END_IF
  7. Declarar una variable de tipo SMC_GroupReadSetPosition para leer el valor actual del robot en coordenadas cartesianas y coordenadas de eje.

    VAR
     Car_pos, Axis_pos :SMC_GroupReadSetPosition; //to read the current axis values
    END_VAR
    
    2:
     Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // to read the current position in cartesian coordinates
     Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // to read the current axis values

Todo el programa PLC_PRG

Compare su programa y agregue las partes del programa que faltan.

Declaración

PROGRAM PLC_PRG
VAR
    Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 :MC_Power;
    istate: INT;

    GroupEnable:MC_GroupEnable;

    Frame:MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
    Pos_Cart:SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
    Pos_Axis:SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates

    MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates (PTP)

    Car_pos,Axis_pos :SMC_GroupReadSetPosition; //to read the current position of the TCP in Cartesian and Axis Coordinates and display it on the visu

    scara_Config:trafo.Kin_Scara3_Z_Config; // To set the configuration of the SCARA_3_Z
    kin_Config:SMC_SetKinConfiguration; // To set the defined configuration of SCARA_3_Z to the axis group used
    nPeriod:DINT:=0; // SCARA_3_Z Period
    Xelbow:BOOL:=TRUE;

END_VAR
VAR CONSTANT
    axispos : TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
END_VAR

Implementación

CASE istate OF

0:
 Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);

 IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN
  istate:=istate+1;
 END_IF

1:
 GroupEnable(AxisGroup:=KinScara, Execute:=TRUE);

 IF GroupEnable.Done THEN
  istate:=istate+1;
 END_IF

2:
 scara_Config(xElbowRight:=Xelbow, nPeriodA3:=nPeriod);
 kin_Config(AxisGroup:=KinScara,ConfigData:=scara_Config.Config, Execute:=TRUE);
 Pos_Cart.c:=Frame; // To represent the TCP in cartesian coordinates

 Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // read the current position in cartesian coordinates
 Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // read the current position in Axis coordinates

 MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined axis coordinates
 //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates

 IF MoveAbs.Done THEN
  MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates
  istate:=2;
 END_IF
END_CASE

Creación de un programa de representación

  1. Agregue un nuevo POU "Representación" del tipo "Programa" debajo de la aplicación. Para hacer esto, haga clic en Proyecto → Agregar objeto → POU.

  2. Declarar una variable de tipo SM3_Depictor.SMC_R_Scara3_Z_Data. Declarar una variable LrSize de tipo LREAL e inicializar la variable con el valor de 100.

    VAR
     ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data;
     LrSize:LREAL:=100;
    END_VAR
  3. Inserte una llamada al bloque de funciones en la implementación.

    ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo);
  4. Agrega el POU "Representación" al Tarea principal.

Configuración de Depictor

  1. Agrega un objeto "Representante" debajo de la aplicación. Para hacer esto, haga clic en Proyecto → Agregar objeto → Representante.

  2. Haz doble clic en el objeto.

  3. Selecciona el Pose elemento en el árbol de Depictor.

  4. Hacer clic Representante → Agregar elemento.

    los Caja El elemento se agrega debajo de la pose.

  5. Selecciona el Representante Ref. opción en las propiedades del elemento.

  6. Haga clic en el _cds_icon_three_dots.png botón.

  7. Selecciona el SMC_R_Depictor_Scara3_Z objeto del SM3_Depictor Biblioteca.

  8. Defina las variables de la interfaz de la siguiente manera:

    • pensión completa: Representante.ScaraTrafo

    • lrZ_: Drive1.fSetPosition

    • lrZmin: 10

    • lrZmax: -50

    • lrSize: Depic.LrSize

    • xShowPlane: 0

Creando visualizaciones

Cree una pantalla de visualización en la que se puedan visualizar y modificar las coordenadas cartesianas y las coordenadas del eje.

_sm_img_depictor_visu.png
  1. Agregue un objeto "Visualización" debajo de la aplicación. Para hacer esto, haga clic en Proyecto → Agregar objeto → Visualización.

  2. Abra la visualización en el editor.

  3. Insertar un Rectángulo elemento de visualización (1).

  4. Cambia las propiedades del elemento.

    • Textos → Texto: %s

    • Variables de texto → Variable de texto: PLC_PRG.Car_pos.Position.c.X

    • Configuración de entrada → OnMouseDown → Escribir variable

      • Tipo de entrada: VisuDialogs.Numpad

      • Usa otra variable: PLC_PRG.Frame.X

  5. Inserta el otro Caja elementos de visualización.

  6. Cambie las propiedades de los elementos (2) y (3).

    • Textos → Texto: %s

    • Variables de texto → Variable de texto: PLC_PRG.Car_pos.Position.c.Y o PLC_PRG.Car_pos.Position.c.Z

    • Configuración de entrada → OnMouseDown → Escribir variable

      • Tipo de entrada: VisuDialogs.Numpad

      • Usa otra variable: PLC_PRG.Frame.Y y PLC_PRG.Frame.Z

  7. Cambie las propiedades de los elementos (4), (5) y (6).

    • Textos → Texto: %s

    • Variables de texto → Variable de texto: PLC_PRG.Frame.A o PLC_PRG.Frame.B o PLC_PRG.Frame.C

  8. Cambie las propiedades de los elementos (7), (8), (9) y (10).

    • Textos → Texto: %s

    • Variables de texto → Variable de texto: PLC_PRG.Axis_pos.Position.a.a0 o PLC_PRG.Axis_pos.Position.a.a1 o PLC_PRG.Axis_pos.Position.a.a2 o PLC_PRG.Axis_pos.Position.a.a3

    • Configuración de entrada → OnMouseDown → Escribir variable

      • Tipo de entrada: VisuDialogs.Numpad

      • Usa otra variable: PLC_PRG.Pos_Axis.a.a0 y PLC_PRG.Pos_Axis.a.a1 y PLC_PRG.Pos_Axis.a.a2 y PLC_PRG.Pos_Axis.a.a3

  9. Etiquete los elementos de visualización con el Etiqueta elemento.

Iniciar y probar el programa

Puede modificar los valores de los ejes en la visualización del proyecto. Si comenta el comando de movimiento activo (MoveAbs..., ...) en el programa PLC_PRG y elimine los comentarios del segundo comando de movimiento, luego puede modificar las coordenadas cartesianas.

  1. Construya el proyecto y descárguelo al PLC.

  2. Abra el editor del objeto Depictor en su proyecto.

  3. Cambie a la visualización y modifique los valores del eje o los valores cartesianos. Observe el movimiento del robot SCARA en Depictor.